import os
from datetime import date
from logging.config import dictConfig

from utils.constants import LOG_FOLDER


def get_time_log_path():
    """
    创建time log的文件名，并返回它会存放的位置
    """
    if not os.path.isdir(LOG_FOLDER):
        os.makedirs(LOG_FOLDER)
    suffix = ".log"
    log_name = str(date.today()) + suffix

    log_file_path = os.path.join(LOG_FOLDER, log_name)
    return log_file_path


def logging_setting():
    """日志的基础配置"""
    # 设置日志的输出格式
    formatters = {
        "default": {
            "format": "[%(asctime)s|%(levelname)s|%(filename)s:%(lineno)d]:%(message)s",
            "datefmt": '%m-%d %H:%M:%S',
        }
    }

    # 日志处理器
    handlers = {
        'console': {  # 标准输出输出
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'default',
        },
        'info_file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'formatter': 'default',
            'when': "d",  # 时间单位可以是h, d, m , y
            'interval': 1,  # 单位数量，多长时间开始新的记录
            'backupCount': 30,  # 能保存的最大日志文件数量
            'filename': get_time_log_path(),
            'encoding': "utf-8"

        },
    }

    # 默认日志,会在getLogger不写名字的情况下使用
    root = {"level": "INFO", "handlers": ["console", 'info_file'], 'propagate': True}

    return {
        'version': 1,
        'disable_existing_loggers': False,  # 不使其他日志失效
        "formatters": formatters,
        "handlers": handlers,
        "root": root
    }


def init_log():
    """加载日志配置"""
    dictConfig(logging_setting())
